package com.theima.innerclassdemo.test1.test5;

/**
 * @program: Myset
 * @description:匿名内部类
 * @author: xuejingjing
 * @create: 2021-06-13 16:14
 **/

/**这是传统的使用接口的步骤
 * 1,创建实现类，通过implements关键字去实现接口
 * 2，重写方法
 * 3，创建实现类对象
 * 4,调用重写后的方法
 */

/**
 * 但是，如果使用匿名内部类，就可以把这4步减为1步。
 * 匿名内部类的前提条件：
 * 需要存在类/接口
 * 使用格式：
 *     new 类名 \ 接口名（）{
 *          重写方法
 *     }
 */


/**
 * 对匿名内部类的理解：
 * 将继承\实现，方法重写，创建对象，放到了一步进行。
 *
 */
public class Test5InnerClass {
    public static void main(String[] args) {
     //1,传统方法
        new InnerImpl().show();
     //2，使用匿名内部类的方式
        new Inner() {   //这个已经是一个实现类了，然后重写里面的方法
            @Override
            public void show() {
                System.out.println("匿名内部类的方式");
            }
        }.show();//这是调用里面的show方法。
        /**
         * show()之前的整体就相当于是实现类。对比学习
         */



        //3.接口中存在多个对象
        //这相当于一个实现类
        Inner2  in2 = new Inner2() {
            @Override
            public void show1() {
                System.out.println("show1...");
            }

            @Override
            public void show2() {
                System.out.println("show12...");

            }
        };

        in2.show1();
        in2.show2();
    }
}

interface Inner{
    void show();
}

interface Inner2{
    void show1();
    void show2();
}


class InnerImpl implements  Inner{

    @Override
    public void show() {
        System.out.println("InnerImpl重写的show方法");
    }
}